#Local Funcitons
def sort_by_last_letter(strings):
    def last_letter(s):
        return s[-1]
    return sorted(strings, key=last_letter)

sort_by_last_letter(['hello', 'from', 'a', 'local', 'function'])

#Local functions are defined on each call
def sort_by_last_letter(strings):
    def last_letter(s):
        return s[-1]
    print(last_letter)
    return sorted(strings, key=last_letter)

sort_by_last_letter(['ghi', 'def', 'abc'])
sort_by_last_letter(['ghi', 'def', 'abc'])
sort_by_last_letter(['ghi', 'def', 'abc'])


#LEGB and local functions
g = 'global'
def outer(p='param'):
    l = 'local'
    def inner():
        print(g, p, l)
    inner()

outer() 


#Local functions are not “members”
outer.inner() # doesn't work 


#Returning functions from functions
def enclosing():
    def local_func():
        print('local func')
    return local_func

lf = enclosing()
lf()

